package com.kuang.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kuang.entity.Product;
import com.kuang.entity.Ticket;
import com.kuang.mapper.ProductMapper;
import com.kuang.vo.ProductVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {


    @Autowired
    private TicketService ticketService;

    /**
     * @author 飞哥yykk
     * @version: 1.0
     * @description: 产品列表查询和分页
     * 用处：微信小程序的产品tabbar中的产品接口
     * @date 2021/8/30 21:20
     */
    public Page<Product> findProductByPage(ProductVo productVo) {
        // 1: 设置查询分页的对象
        Page<Product> page = new Page<>(productVo.getPageNo(), productVo.getPageSize());
        // 2 : 设置查询条件
        LambdaQueryWrapper<Product> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 根据一级分类查询产品
        lambdaQueryWrapper.eq(productVo.getCategoryPid() != null, Product::getCategoryPid, productVo.getCategoryPid());
        // 根据二级分类查询产品
        lambdaQueryWrapper.eq(productVo.getCategoryCid() != null, Product::getCategoryCid, productVo.getCategoryCid());
        // 查询产品是发布的产品 status = 1
        lambdaQueryWrapper.eq(Product::getStatus, 1);
        // 把最新的的产品查询出来
        lambdaQueryWrapper.orderByDesc(Product::getCreateTime);
        // 3: 调用分页查询，返回查询结构
        return this.page(page, lambdaQueryWrapper);
    }


    /**
     * @author 飞哥yykk
     * @version: 1.0
     * @description: 小程序首页查询
     * 用处：微信小程序的产品tabbar中的产品接口
     * @date 2021/8/30 21:20
     */
    public Page<Product> findProductByPageIndex(ProductVo productVo) {
        // 1: 设置查询分页的对象
        Page<Product> page = new Page<>(productVo.getPageNo(), productVo.getPageSize());
        // 2 : 设置查询条件
        LambdaQueryWrapper<Product> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 根据一级分类查询产品
        lambdaQueryWrapper.eq(productVo.getCategoryPid() != null, Product::getCategoryPid, productVo.getCategoryPid());
        // 根据二级分类查询产品
        lambdaQueryWrapper.eq(productVo.getCategoryCid() != null, Product::getCategoryCid, productVo.getCategoryCid());
        // 查询产品是发布的产品 status = 1
        lambdaQueryWrapper.eq(Product::getStatus, 1);
        // 必须是查询放在首页的
        lambdaQueryWrapper.eq(Product::getIsindex, 1);
        // 把最新的的产品查询出来
        lambdaQueryWrapper.orderByDesc(Product::getCreateTime);
        // 3: 调用分页查询，返回查询结构
        return this.page(page, lambdaQueryWrapper);
    }


    /**
     * @return com.kuang.entity.Product
     * @Author 徐柯
     * @Description 查询产品明细包括门票和露营票
     * @Date 10:38 2021/9/4
     * @Param [productId]
     **/
    public Product getProductDetail(Long productId) {
        // 1:查询对应产品信息
        Product product = this.getById(productId);
        // 2:根据产品ID查询对应门票
        List<Ticket> ticketList = ticketService.findTicketByProductId(productId, 1);
        product.setTicketList(CollectionUtils.isEmpty(ticketList) ? new ArrayList<>() : ticketList);
        // 3:根据产品ID查询露营票
        List<Ticket> ticketList2 = ticketService.findTicketByProductId(productId, 2);
        product.setTicketCamping(CollectionUtils.isEmpty(ticketList) ? new ArrayList<>() : ticketList2);
        return product;
    }
}

